/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package fonol.facades;

import fonol.entidades.Beneficiarios;
import fonol.entidades.Delegados;
import fonol.entidades.Estados;
import fonol.entidades.EstatusCandidato;
import fonol.entidades.Proyectos;
import java.util.List;
import java.util.logging.Logger;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

/**
 *
 * @author Fredfred2
 */
@Stateless
public class ProyectosFacade implements ProyectosFacadeRemote {
    @PersistenceContext
    private EntityManager em;

    public void create(Proyectos proyectos) {
        em.persist(proyectos);
    }

    public void edit(Proyectos proyectos) {
        em.merge(proyectos);
    }

    public Proyectos modificar(Proyectos proyectos) {
        logea("ProyectosFacade.modificar.proyectos:"+proyectos);
        return em.merge(proyectos);
    }
    
    public void remove(Proyectos proyectos) {
        em.remove(em.merge(proyectos));
    }

    public Proyectos find(Object id) {
        return em.find(fonol.entidades.Proyectos.class, id);
    }

    public List<Proyectos> findAll() {
        return em.createQuery("select object(o) from Proyectos as o").getResultList();
    }

    public List<Proyectos> getProyectosPorBeneficiario(Beneficiarios beneficiario) {
        return em.createNamedQuery("Proyectos.findByBeneficiario").setParameter("beneficiario", beneficiario).getResultList();
    }

    public boolean verificaFondos(Proyectos pro,Delegados del) {
        Beneficiarios ben=pro.getIdbeneficiario();
        double presupuestoActual=0;
        double presupuestoDelegado=del.getPresupuesto().doubleValue();
        List<Proyectos> proys= em.createQuery("select pro " +
                "from Proyectos pro " +
                "where pro.beneficiario=:beneficiario " +
                "and pro.estatus=:estatus").setParameter("beneficiario", ben).setParameter("estatus", EstatusCandidato.ACEPTADO).getResultList();
        logea(proys+"");
        for(Proyectos p:proys)
            presupuestoActual+=p.getPresupuesto().doubleValue();
        presupuestoActual+=pro.getPresupuesto().doubleValue();
        logea(presupuestoActual+"");
        logea(presupuestoDelegado+"");
        if(presupuestoActual>presupuestoDelegado)
            return false;
        return true;
    }

    public double regresaPresupuestoUtilizado(Estados estado) {
        double presupuestoActual=0;
        String query=
                "select p.idproyecto as idproyecto,p.presupuesto as presupuesto " +
                "from proyectos p " +
                "inner join beneficiarios b on p.idbeneficiario=b.idbeneficiario " +
                "inner join candidatos c on c.idcandidato=b.idcandidato " +
                "inner join estados e on e.idestado=c.idestado " +
                "where " +
                "e.idestado="+estado.getIdestado()+" and " +
                "p.estatus=0";
        List<Proyectos> proys= em.createNativeQuery(query,"ProyectosResult").getResultList();
        for(Proyectos p:proys)
            presupuestoActual+=p.getPresupuesto().doubleValue();
        
        logea(presupuestoActual+"");
        return presupuestoActual;
        
    }
    
    private void logea(String m){
        Logger log=Logger.getLogger(ProyectosFacade.class.getName());
        log.info(m);
    }


}
